// 客户端结构和常量
#ifndef _CLIENT_
#define _CLIENT_

#include "head.h"
#include "protocol.h"
/* 常量定义 */
#define MAX_BUF_SIZE 4096   // 接收缓冲区大小
#define MAX_RETRIES 3       // 网络操作最大重试次数
#define CMD_TIMEOUT_SEC 5   // 命令超时时间(秒)
#define MAX_USERNAME_LEN 64 // 用户名最大长度
#define MAX_PASSWORD_LEN 64 // 用户密码最大长度
#define MAX_SALT_LEN 64     // 用户密码的盐值长度

// 命令输入合法性审查
// typedef enum
// {
//     CMD_LEGAL,   // 合法命令
//     CMD_ILLEGAL, // 不合法命令
//     CMD_EXIT,    // 退出
// } CommandCheck;

// 客户端状态
typedef enum
{
    STATE_AWAIT_AUTH, // 认证等待-0

    STATE_IDLE,       // 等待用户输入-1
    STATE_AWAIT_RESP, // 已发送请求，等待响应-2
    STATE_ERROR,      // 错误状态-3

    STATE_REGISTER,      // 注册成功-4
    STATE_REGISTER_FAIL, // 注册失败-5
    STATE_LOGIN,         // 登录成功-6
    STATE_LOGIN_FAIL,    // 登录失败-7
} ClientState;

/* 客户端上下文结构体
 * 维护整个客户端的运行时状态 */
typedef struct
{
    int sockfd;                   // 连接套接字
    ClientState state;            // 状态机状态
    char current_dir[256];        // 当前目录缓存(优化用户体验)
    char token[JWT_TOKEN_LENGTH]; // token字段
} ClientContext;

/* 用户登录信息 */
typedef struct
{
    char user_name[MAX_USERNAME_LEN]; // 用户名
    char password[MAX_PASSWORD_LEN];  // 密码
    char salt[MAX_SALT_LEN];          // 盐值
} UserLogInfo;

#endif // CLIENT_H